﻿/* ***************************************************************************************
 * Linq To SystemSearch
 * 
 *
 * This is an example of how extend LinQ using IQueruable and IOrderedQuerable interfaces.
 * 
 * User this code as you want,  is free.
 * 
 * Develop by: Mario Rodriguez
 * email: marior666@hotmail.com
 * 
 ********************************************************************************************/

namespace System.Search.Linq
{
    /// <summary>
    /// 
    /// </summary>
    public class IBaseSystem { }

    /// <summary>
    /// 
    /// </summary>
    public class SystemSearch : IBaseSystem
    {

        public string ItemPathDisplay { get; set; }
        public string ItemName { get; set; }
        public string ItemType { get; set; }


        public Int32 AcquisitionID { get; set; }
        public string[] Author { get; set; }
        public UInt64 Capacity { get; set; }
        public string Category { get; set; }
        public string Comment { get; set; }
        public string Company { get; set; }
        public string ComputerName { get; set; }
        public Guid[] ContainedItems { get; set; }
        public string ContentStatus { get; set; }
        public string ContentType { get; set; }
        public DateTime DateAccessed { get; set; }
        public DateTime DateArchived { get; set; }
        public DateTime DateImported { get; set; }
        public DateTime DateModified { get; set; }

        public DateTime DueDate { get; set; }
        public DateTime EndDate { get; set; }
        public UInt64 FileAllocationSize { get; set; }
        public UInt32 FileAttributes { get; set; }
        public UInt64 FileCount { get; set; }
        public string FileDescription { get; set; }
        public string FileExtension { get; set; }
        public UInt64 FileFRN { get; set; }
        public string FileName { get; set; }
        public string FileOwner { get; set; }
        public string FileVersion { get; set; }
        public byte[] FindData { get; set; }
        public UInt16 FlagColor { get; set; }
        public UInt16 FlagColorText { get; set; }
        public string FlagStatus { get; set; }
        public string FlagStatusText { get; set; }
        public bool IsAttachment { get; set; }
        public bool IsDeleted { get; set; }
        public bool IsFlagged { get; set; }

        public bool IsFlaggedComplete { get; set; }
        public bool IsIncomplete { get; set; }
        public bool IsRead { get; set; }
        public bool IsSentToTarget { get; set; }
        public bool IsShared { get; set; }
        public string[] ItemAuthors { get; set; }
        public DateTime ItemDate { get; set; }
        public string ItemFolderNameDisplay { get; set; }
        public string ItemNamePrefix { get; set; }
        public string[] ItemParticipants { get; set; }
        public string ItemPathDisplayNarrow { get; set; }
        public string ItemTypeText { get; set; }
        public string ItemUrl { get; set; }
        public string[] Keywords { get; set; }
        public string[] Kind { get; set; }
        public string KindText { get; set; }
        public string Language { get; set; }
        public string MileageInformation { get; set; }
        public string MIMEType { get; set; }
        public UInt32 OfflineAvailability { get; set; }
        public UInt32 OfflineStatus { get; set; }
        public string OriginalFileName { get; set; }
        public string ParentalRating { get; set; }
        public string ParentalRatingOrganization { get; set; }
        public object ParsingBindContext { get; set; }
        public string ParsingName { get; set; }
        public string ParsingPath { get; set; }
        public Int32 PerceivedType { get; set; }
        public UInt32 PercentFull { get; set; }
        public UInt16 Priority { get; set; }
        public string PriorityText { get; set; }
        public string Project { get; set; }
        public string ProviderItemID { get; set; }
        public UInt32 Rating { get; set; }
        public string RatingText { get; set; }
        public UInt16 Sensitivity { get; set; }
        public UInt32 SFGAOFlags { get; set; }
        public string[] SharedWith { get; set; }
        public UInt32 ShareUserRating { get; set; }
        public Shell Shell { get; set; }
        public UInt32 SimpleRating { get; set; }
        public UInt64 Size { get; set; }
        public string SoftwareUsed { get; set; }
        public string SourceItem { get; set; }
        public DateTime StartDate { get; set; }
        public string Status { get; set; }
        public string Subject { get; set; }
        public byte[] Thumbnail { get; set; }
        public UInt64 ThumbnailCacheId { get; set; }
        public UInt64 ThumbnailDateHash { get; set; }
        public object ThumbnailStream { get; set; }
        public string Title { get; set; }
        public UInt64 TotalFileSize { get; set; }
        public string Trademarks { get; set; }

        public Document Document { get; set; }
        public Image Image { get; set; }
        public Audio Audio { get; set; }
        public Music Music { get; set; }
        public Software Software { get; set; }
        public Computer Computer { get; set; }
        public Link Link { get; set; }
        public Communication Communication { get; set; }
        public Note Note { get; set; }
        public DRM DRM { get; set; }

    }

    /// <summary>
    /// 
    /// </summary>
    public  class Shell : IBaseSystem
    {

        public string OmitFromView { get; set; }
    }

    /// <summary>
    /// 
    /// </summary>
    public class Document : IBaseSystem
    {
        public DateTime DateCreated { get; set; }
        public UInt32 PageCount { get; set; }
        public Int32 ByteCount { get; set; }
        public Int32 CharacterCount { get; set; }
        public string ClientID { get; set; }
        public DateTime DatePrinted { get; set; }
        public DateTime DateSaved { get; set; }
        public string Division { get; set; }
        public string DocumentID { get; set; }

        public UInt32 HiddenSlideCount { get; set; }
        public string LastAuthor { get; set; }
        public Int32 LineCount { get; set; }
        public string Manager { get; set; }
        public UInt32 MultimediaClipCount { get; set; }
        public UInt32 NoteCount { get; set; }
        public UInt32 ParagraphCount { get; set; }
        public string PresentationFormat { get; set; }
        public string RevisionNumber { get; set; }
        public Int32 Security { get; set; }
        public UInt32 SlideCount { get; set; }
        public string Template { get; set; }
        public UInt64 TotalEditingTime { get; set; }
        public string Version { get; set; }
        public UInt32 WordCount { get; set; }

    }

    /// <summary>
    /// 
    /// </summary>
    public class Image : IBaseSystem
    {
        public string CompressionText { get; set; }
        public UInt32 BitDepth { get; set; }
        public UInt16 ColorSpace { get; set; }
        public double CompressedBitsPerPixel { get; set; }
        public UInt32 CompressedBitsPerPixelDenominator { get; set; }
        public UInt16 Compression { get; set; }
        public double HorizontalResolution { get; set; }
        public UInt32 HorizontalSize { get; set; }
        public double VerticalResolution { get; set; }
        public UInt32 VerticalSize { get; set; }
        public UInt16 ResolutionUnit { get; set; }
        public string ImageID { get; set; }

    }

    /// <summary>
    /// 
    /// </summary>
   public  class Audio : IBaseSystem
    {

        public UInt32 ChannelCount { get; set; }
        public UInt16 Compression { get; set; }
        public UInt32 EncodingBitrate { get; set; }
        public string Format { get; set; }
        public bool IsVariableBitRate { get; set; }
        public UInt32 PickValue { get; set; }
        public UInt32 SampleRate { get; set; }
        public UInt32 SampleSize { get; set; }
        public string StreamName { get; set; }
        public UInt16 StreamNumber { get; set; }


    }

    /// <summary>
    /// 
    /// </summary>
    public class Music : IBaseSystem
    {

        public string AlbumArtist { get; set; }
        public string AlbumTitle { get; set; }
        public string Artist { get; set; }
        public string BeatsPerMinute { get; set; }
        public string Composer { get; set; }
        public string Conductor { get; set; }
        public string ContentGroupDescription { get; set; }
        public string Genere { get; set; }
        public string InitialKey { get; set; }
        public string Lyrics { get; set; }
        public string Mood { get; set; }
        public string PartOfSet { get; set; }
        public string Period { get; set; }
        public UInt32 TrackNumber { get; set; }
        public object SynchronizedLyrics { get; set; }


    }

    /// <summary>
    /// 
    /// </summary>
    public class Software : IBaseSystem
    {
        public Nullable<DateTime> DateLastUsed { get; set; }
        public string ProductName { get; set; }

    }

    /// <summary>
    /// 
    /// </summary>
    public class Computer : IBaseSystem
    {
        public UInt64 DecoratedFreeSpace { get; set; }


    }

    /// <summary>
    /// 
    /// </summary>
    public class Link : IBaseSystem
    {
        public string Comment { get; set; }
        public DateTime DateVisited { get; set; }
        public string Description { get; set; }
        public Int32 Status { get; set; }
        public string TargetExtension { get; set; }
        public string TargetParsingPath { get; set; }
        public UInt32 TargetSFGAOFlags { get; set; }
        
    }

    /// <summary>
    /// 
    /// </summary>
    public class Communication : IBaseSystem
    {
        public string AccountName { get; set; }
        public string Suffix { get; set; }
        public UInt16 TaskStatus { get; set; }
        public string TaskStatusText { get; set; }


    }

    /// <summary>
    /// 
    /// </summary>
    public class Note : IBaseSystem
    {
        public UInt16 Color { get; set; }
        public string ColorText { get; set; }



    }

    /// <summary>
    /// 
    /// </summary>
    public class DRM : IBaseSystem
    {
        public DateTime DatePlayExpire { get; set; }
        public DateTime DatePlayStarts { get; set; }
        public string Description { get; set; }
        public bool IsProtected { get; set; }
        public UInt32 PlayCount { get; set; }


    }
}
